package edu.friday.service;

import edu.friday.common.result.RestResult;
import edu.friday.model.User;
import edu.friday.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

    public List<User> findByCriteria(String username, String major) {
        if (username != null && major != null) {
            return userRepository.findByUsernameContainingAndMajorContaining(username, major);
        } else if (username != null) {
            return userRepository.findByUsernameContaining(username);
        } else {
            return userRepository.findByMajorContaining(major);
        }
    }

    // 新增方法：检查用户名是否存在
    public boolean usernameExists(String username) {
        return userRepository.existsByUsername(username);
    }

    // 新增方法：保存用户
    public User saveUser(User user) {
        // 设置默认删除标志为0（未删除）
        if (user.getDelFlag() == null) {
            user.setDelFlag(0);
        }
        return userRepository.save(user);
    }

    /**
     * 更新用户信息
     * @param user 用户对象(包含ID和需要更新的字段)
     * @return 更新后的用户
     */
    public RestResult updateUser(User user) {
        // 1. 检查用户是否存在
        Optional<User> existingUserOpt = userRepository.findById(user.getId());
        if (!existingUserOpt.isPresent()) {
            return RestResult.error("用户不存在");
        }
        User existingUser = existingUserOpt.get();

        // 2. 检查用户名是否可修改
        if (user.getUsername() != null && !user.getUsername().equals(existingUser.getUsername())) {
            if (userRepository.existsByUsernameAndIdNot(user.getUsername(), user.getId())) {
                return RestResult.error("用户名已存在");
            }
            existingUser.setUsername(user.getUsername());
        }

        // 3. 更新非空字段
        if (user.getPassword() != null) existingUser.setPassword(user.getPassword());
        if (user.getNumber() != null) existingUser.setNumber(user.getNumber());
        if (user.getSex() != null) existingUser.setSex(user.getSex());
        if (user.getAge() != null) existingUser.setAge(user.getAge());
        if (user.getMajor() != null) existingUser.setMajor(user.getMajor());

        // 4. 保存更新
        User updatedUser = userRepository.save(existingUser);
        return RestResult.success("用户修改成功", updatedUser);
    }

    /**
     * 删除用户（逻辑删除）
     * @param id 用户ID
     * @return 操作结果
     */
    public RestResult deleteUser(Integer id) {
        // 检查用户是否存在且未删除
        Optional<User> userOpt = userRepository.findById(id);
        if (!userOpt.isPresent()) {
            return RestResult.error("用户不存在");
        }

        User user = userOpt.get();
        if (user.getDelFlag() == 2) {
            return RestResult.error("用户已被删除");
        }

        // 执行逻辑删除
        int updated = userRepository.logicalDeleteById(id);
        if (updated == 0) {
            return RestResult.error("删除用户失败");
        }

        return RestResult.success("用户删除成功");
    }
}